#!/bin/bash
#-*- coding:utf-8 -*-

W='\033[0m'  # white (normal)
R='\033[1;31;40m' # red
G='\033[1;32;40m' # green
O='\033[1;33;40m' # orange
B='\033[1;34;40m' # blue
P='\033[1;35;40m' # purple
C='\033[1;36;40m' # cyan
GR='\033[1;37;40m' # gray
LN='\033[1;4;37;40m'

REVISION="20"


gateway=`route | grep default|awk '{print $2}'` 
red=`route | grep default|awk '{print $8}'`
# Por si tenemos mas de un adaptador de red en nuestra maquina
read gateway gateway2 <<<$(IFS=" "; echo $gateway)
read red red2 <<<$(IFS=" "; echo $red)
#Sacamos la dirección ip de nuestra maquina
ip=`/sbin/ifconfig $red | grep inet |awk '{print $2}'|grep '[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}'|cut -c 6-`

ip_amigas=()
ip_amigas+=($gateway)
ip_amigas+=($ip)


function actualizar(){
    wget -O sierra21.sh 'http://sierra21.googlecode.com/svn/trunk/sierra21.sh' 2>/dev/null
    dialog --msgbox "A continuación va a salir del programa, vuelva a ejecutarlo si desea probar la nueva version" 0 0
    chmod +x sierra21.sh
    clear
    echo -e $P"[+] ejecutelo de nuevo con sudo ./sierra21.sh"$W
    exit 0

}



function upgrade(){
    wget -O pagina.html 'http://code.google.com/p/sierra21/source/list?path=/trunk/sierra21.sh' 2>/dev/null
    rev=`cat pagina.html |grep "href=\"detail?r="|awk -F "=" '{print $4}'|grep '[[:digit:]]\{1,9\}'|awk -F "&" '{print $1}'|awk -v RS="" '{print $1}'`
    desc=`cat pagina.html |grep "href=\"detail?r="|awk -F "=" '{print $6}'|awk -F ">" '{print $2}'|grep -m 1 -m 2  '[[:alnum:]]\{1,9\}'|sed 's/<\/a//'`
    rm pagina.html
    #echo $rev,$REVISION
    if [[ $rev -le $REVISION ]]; then
        dialog --msgbox "Su versión está actualizada al día" 8 60
    else
        dialog --msgbox "Su versión va a ser actualizada de la "$REVISION" a la "$rev"\nDescipción y fecha actualización:\n$desc" 8 60
        actualizar
    fi
}

function escanear(){
    echo -e $G'[+]'$W' Escaneando red...'
    scaneo=`nmap -sP ${gateway}/24 | grep [Nmap\|Host]|awk '{print $5 "#"$2 }'|grep '[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}\.[[:digit:]]\{1,3\}'|cut -f 1 -d "#"`
    contador="0"
    for linea in $scaneo
    do
        reg=""
        for rev in ${ip_amigas[@]}
        do
            if [ "$linea" = "$rev" ]; then
               reg="OK"
            fi
        done
        if [ -z $reg ] ; then
            texto=`echo -e ${texto}"\n"${linea}`
            intrusos[$contador]=$linea
            let contador++
        fi
    done
    #echo "${intrusos[*]}"
    dialog --msgbox "Intrusos:\n$texto" 0 0

}

function info_intrusos(){
    if [[ ${intrusos[0]} == "" ]];then
        clear
        echo -e $R'Antes tienes que scanear intrusos'$P' Pulsa enter para continuar'$W
        read
        return
    fi
    clear
    contador="0"
    opcion_intruso=""
    for intruso in ${intrusos[@]}
    do
        opcion_intruso=${opcion_intruso}' '${contador}' '${intruso}
        let contador++
    done
    dialog --menu "Elegir intruso" 0 0 0 $opcion_intruso 2> info_intruso.txt
    op_inf=`cat info_intruso.txt`
    echo -e $G'Scan a intruso...'$W
    nmap_scan=`nmap ${intrusos[$op_inf]}`
    dialog --msgbox "$nmap_scan" 0 0
}

function espiar_intruso(){
    if [[ ${intrusos[0]} == "" ]];then
        clear
        echo -e $R'Antes tienes que scanear intrusos'$P' Pulsa enter para continuar'$W
        read
        return
    fi
    clear
    contador="0"
    opcion_intruso=""
    for intruso in ${intrusos[@]}
    do
        opcion_intruso=${opcion_intruso}' '${contador}' '${intruso}
        let contador++
    done
    dialog --menu "Elegir intruso para espiar" 0 0 0 $opcion_intruso 2> info_intruso.txt
    clear
    op_inf=`cat info_intruso.txt`
    echo ${intrusos[$op_inf]}
    echo "Aún no se ha desarrollado esta opción"
    read
}


function aviso_intruso(){
    if [[ ${intrusos[0]} == "" ]];then
        clear
        echo -e $R'Antes tienes que scanear intrusos'$P' Pulsa enter para continuar'$W
        read
        return
    fi
    clear
    contador="0"
    opcion_intruso=""
    for intruso in ${intrusos[@]}
    do
        opcion_intruso=${opcion_intruso}' '${contador}' '${intruso}
        let contador++
    done
    dialog --menu "Elegir intruso para aviso" 0 0 0 $opcion_intruso 2> info_intruso.txt
    clear
    op_inf=`cat info_intruso.txt`
    echo ${intrusos[$op_inf]}
    echo "Aún no se ha desarrollado esta opción"
    read
}



function menu(){
    
dialog --menu "Menu de opciones" 0 0 0 1 "Escanear en busca de intrusos" 2 "Información acerca de intruso" 3 "Espiar intruso" 4 "Dar aviso a intruso" 5 "Actualizar version" 6 "Salir" 2> error.txt
}


op="0"

while [ "$op" -ne "6" ];    #O UNTIL

do
    clear
    menu
    op=`cat error.txt`
    

    case $op in
       "1")
            escanear
       ;;

       "2")
            info_intrusos
       ;;

       "3")
            espiar_intruso
       ;;    

       "4")
            aviso_intruso
       ;;    

       "5")
            upgrade
       ;;    


    esac
rm error.txt info_intruso.txt
clear
done


